package pers.qianyu.month_202101.date_20210128;

import org.junit.*;

/**
 * 剑指 Offer 44. 数字序列中某一位的数字
 * https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/
 *
 * @author mizzle rain
 * @date 2021年1月28日16:22:25
 */
public class FindNthDigit {
    /**
     * 1 - 9 ：          9 个数(start * 9) 1 位(digit += 1)
     * 10 - 99 ：        90 个数           2 位
     * 100 - 999 ：      900 个数          3 位
     * 1000 - 9999 ：    9000 个数         4 位
     */
    public int findNthDigit(int n) {
        long start = 1, count = 9, digit = 1;
        while (n > count) {
            n -= count;
            start *= 10;
            digit++;
            count = start * 9 * digit;
        }
        long num = start + (n - 1) / digit;
        return ("" + num).charAt((int) ((n - 1) % digit)) - '0';
    }

    @Test
    public void test1() {
        int result = new FindNthDigit().findNthDigit(10);
        System.out.println("result = " + result);
    }

    @Test
    public void test2() {
        int result = new FindNthDigit().findNthDigit(11);
        System.out.println("result = " + result);
    }

    @Test
    public void test3() {
        // 012345678910111213141516
        int result = new FindNthDigit().findNthDigit(20);
        System.out.println("result = " + result);
    }
}